/* 
 * File:   hach.h
 * Author: Assia
 *
 * Created on 3 juin 2013, 20:51
 */

#ifndef HACH_H
#define HACH_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "common.h"
#include <math.h>
#include <string.h>


#define TAILLE_DICO 4096

/**
 * \struct Cellule
 * \brief Objet de cellule
 *
 */
typedef struct{
    Code code;       /*!< le code de la sequence */  
    char* sequence; /*!< La sequence */
    int taille;   /*!< La taille de la sequence */
} cellule ;


/**
 * \fn Code hashSequence(char *sequence)
 * \brief Attribution d'un code correspondant à la séquence.
 * 
 * \return Le code de la séquence
 */




Code hashSequence(char *sequence);


/**
 *Déclaration d'un tableau de pointeur de cellule
 */


cellule *Dictionnaire[TAILLE_DICO];


int nb_elem;
int nb_bits;
int indice_max;
int nb_elem_max;


/**
 * \fn int Initialiser()
 * \brief Initialisation du dictionnaire
 * 
 * \return NO_ERROR ou une erreur d'initalisation
 */
int Initialiser();


/**
 * \fn int Inserer (Code prefixe, Code mono)
 * \brief Insertion dans le dictionnaire
 *
 * \param prefixe Le prefixe à inserer
 * \param mono Le monome à inserer si le prefixe est deja présent
 * 
 * \return NO_ERROR ou une erreur de compression
 */
int Inserer (Code prefixe, Code mono);


/**
 * \fn char *CodeVersChaine(Code code, int *longueur)
 * \brief Retouver une chaine via son Code dans le dictionnaire
 *
 * \param code Le code 
 * \param longueur La longueur de la chaine a rechercher
 * 
 * \return La chaine correspondant au code
 */


char *CodeVersChaine(Code code, int longueur);




/**
 * \fn Code SequenceVersCode( char *sequence, int longueur)
 * \brief Retouver un code via sa sequence correspondante
 *
 * \param sequence La sequence de reference
 * \param longueur La longueur de la sequence
 * 
 * \return Le code correspondant
 */
Code SequenceVersCode( char *sequence, int longueur);


/**
 * \fn void AfficherDictionnaire()
 * \brief Affiche le contenu du dictionnaire
 */
void AfficherDictionnaire();



#endif  /* HACH_H */

